package config

import (
	"fmt"
	"log"
	"ppp/internal/models"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

// DB 全局数据库连接实例
var DB *gorm.DB

// InitDatabase 初始化数据库连接
func InitDatabase() error {
	// 数据库连接信息
	host := "127.0.0.1"
	port := "3308"
	user := "root"
	password := "123456"
	dbname := "cruduser"

	// 构建DSN连接字符串
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		user, password, host, port, dbname)

	// 配置GORM
	config := &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info), // 设置日志级别为Info
	}

	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), config)
	if err != nil {
		return fmt.Errorf("无法连接到数据库: %v", err)
	}

	// 设置全局DB实例
	DB = db

	// 自动迁移数据库表结构
	err = migrateDatabase()
	if err != nil {
		return fmt.Errorf("数据库迁移失败: %v", err)
	}

	log.Println("数据库连接成功并完成迁移")
	return nil
}

// migrateDatabase 执行数据库迁移
func migrateDatabase() error {
	// 自动迁移表结构
	err := DB.AutoMigrate(
		&models.User{},
		&models.News{},
	)
	if err != nil {
		return err
	}

	return nil
}

// GetDB 获取数据库连接实例
func GetDB() *gorm.DB {
	return DB
}